home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
gamesrc
/
rtankexe
/
patrol.txt
< prev
next >
Wrap
Text File
|
1989-05-16
|
6KB
|
171 lines
;-----------------------------------------------------------
; PATROL.TXT
;-----------------------------------------------------------
; This tank will pick an (x,y) location, and move to it, as
; quickly as possable. Once there, it will show a little
; fireworks display.
;-----------------------------------------------------------
; There are quicker ways to write this, this is just one of
; many available.
;
; The tank uses AUTOmatic tank movement (which is fast, but
; not accurate) to get in the general area of the destination.
; Once there it uses the MOVE command for exact placement, if
; that is possible (IE: the destination is not covered
; by an unmovable object like a tree).
; If the tank gets caught on an unmovable object, it will pick
; a new location.
;-----------------------------------------------------------
; This program shows some advanced tank programming stratagies, so
; examine it closely, and modify it freely!
; - Sandy Walsh, May 16/89
;-----------------------------------------------------------
;---------------------
; Variable definitions
;---------------------
make x ; This is the destination X location
make y ; and the destination Y location
make d ; Direction required to reach X,Y
make look ; Response from the scan command. Used to check
; if there is an enemy tank in the direction the
; tank is currently looking.
make bump ; Counter for how many times we hit an unmoveable object
make count ; Number of move-loops count
make scrap ; Junk variable for simple loops, etc
;---------------------
; Start of program
;---------------------
select 3 ; Select the Cannon as a weapon
:align ; Make the Tank and the Turrent face the same direction
aim ctdir
jneq ctdir,cgdir,:align
lock 1 ; Now that they face the same way, lock them together
:loop ; ->>>- Main Loop ->>>+
; |
rand x,100 ; Pick a Destination |
rand y,70 ; V
; V
call :getthere ; Call subroutine |
; |
call :display ; WE'RE HERE! |
; Make a display!! |
goto :loop ; --------<<<---------+
;---------------------
; End of Main program
;---------------------
;-------------------------------------
:getthere
;-------------------------------------
; Move Tank currently at (whereX, whereY) to (X,Y)
;-------------------------------------
set count,0 ; Reset the loop counter
:loop2
auto 0 ; Start the tank moving automatically
jeq x,wherex,:check ; Does the X axis match up?? If so go to :check
:nope
auto 1
conv x,y,d ; Convert the destination to a direction from 1-8
jeq ctdir,d,:skip1 ; If we don't have to change from our current direction
; Go to :skip1
auto 0
face d
add count,1 ; Increase the loop counter by 1
jgt count,8,:FineMove ; If we have to turn more than 3 times (Which we shouldn't!)
; Go to the "Fine Movement" routine
:skip1
auto 0
jeq blockage,1,:Check_Object ; If we are blocked by an unmoveable object. Check it out
auto 1
set bump,0 ; Otherwise, Reset Bump to zero
goto :loop2 ; Keep moving towards destination
;---------------------------------------------------------------
:check
jneq y,wherey,:nope ; Does the y-axis also match? If not, go back to loop
; If yes ...
:goback
return ; Go back to calling function
:Check_Object
add bump,1 ; increase the number of times we hit an
; unmovable object in a row.
jlt bump,10,:loop2 ; If not 10 times, go back to movement loop
goto :goback ; If we hit the object 10 times, go somewhere else.
;----------------------------------------------------------------
:FineMove
;-------------------------------------
; Move Tank currently at (whereX, whereY) to (X,Y), using fine movement
;-------------------------------------
auto 0 ; Automatic tank movement is ALWAYS OFF in fine move
:loop3
jeq x,wherex,:check1 ; Does the X axis match up?? If so go to :check1
:nope1
conv x,y,d ; Convert the destination to a direction from 1-8
face d ; Desired direction (d)
move ; Move a single step in the desired direction.
jeq blockage,1,:Check_Object1 ; If we are blocked by an unmoveable object. Check it out
set bump,0 ; Otherwise, Reset Bump to zero
goto :loop3 ; Keep moving towards destination
;---------------------------------------------------------------
:check1
jneq y,wherey,:nope1 ; Does the y-axis also match? If not, go back to loop
; If yes ...
goto :goback
:Check_Object1
add bump,1 ; increase the number of times we hit an
; unmovable object in a row.
jlt bump,10,:loop3 ; If not 10 times, go back to movement loop
goto :goback ; If we hit the object 10 times, go somewhere else.
;----------------------------------------------
:Display
;----------------------------------------------
; This routine simply spins the tank around and shoots all over the place.
; It is used to show that we have reached our destination.
; It could, however, do something useful like:
; - Radio other tanks of the location
; - Sit for a little while, and track other tanks
; - Plant mines
; - Or all of the above!!
;----------------------------------------------
set scrap,0
:dispLoop
fire ; Fire cannon
right ; Spin clockwise
add scrap,1 ; Increment counter
jlt scrap,8,:dispLoop ; Turn 8 times
return ; Go back and do it again!
;-----------------------
; End of PATROL.TXT
;-----------------------